重载与作用域

  在不同的非名字空间作用域里声明的函数不算是重载。例如,

    void f(int);
    void g()
    {
        void f(double);
        f(1);                // 调用f(double)
    }

很清楚,f(int)应该是对f(1)的最好匹配,但只有f(double)在作用域里。对于这类情况,可以通过加入或者去除局部声明的方式去取得所需要的行为。与其他地方一样,有意识的屏蔽可以成为一种很有用的技术,但无意识的屏蔽则是产生令人吃惊情况的一个根源。如果希望重载能够跨越类作用域(15.2.2节)或名字空间作用域(8.2.9.2节),那么可以利用使用声明或者使用指令(8.2.2节)。另见8.2.6节。

🔚